﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Agresso.Interface.Layer.Gateway;
using Agresso.Interface.Layer.Domain;
using System.Data.SqlClient;
using Agresso.Interface.Layer.SQL;
using System.Data;

namespace Agresso.Interface.Layer.Service
{
    public class AcrBatcInputService
    {
        DataBaseConnectivity m_dataBaseConectivity;
        public AcrBatcInputService()
        {
            m_dataBaseConectivity = new DataBaseConnectivity();
        }
        public void Insert(acrbatchinput abi)
        {
            try
            {
                m_dataBaseConectivity.AgrTempConnectionSQLConnection.Open();
                SqlCommand cmd = new SqlCommand(AcrBatchInputSQL.InsertAcrBatchInputSQL(), m_dataBaseConectivity.AgrTempConnectionSQLConnection);
                cmd.Parameters.Add("@arrival_date", SqlDbType.DateTime).Value = abi.arrival_date;
                cmd.Parameters.Add("@disc_date", SqlDbType.DateTime).Value = abi.disc_date;
                cmd.Parameters.Add("@due_date", SqlDbType.DateTime).Value = abi.due_date;
                cmd.Parameters.Add("@trans_date", SqlDbType.DateTime).Value = abi.trans_date;
                cmd.Parameters.Add("@voucher_date", SqlDbType.DateTime).Value = abi.voucher_date.Date;
                cmd.Parameters.Add("@compl_delay", SqlDbType.DateTime).Value = abi.compl_delay;
                cmd.Parameters.Add("@amount", SqlDbType.Decimal).Value = abi.amount;
                cmd.Parameters.Add("@base_amount", SqlDbType.Decimal).Value = abi.base_amount;
                cmd.Parameters.Add("@base_curr", SqlDbType.Decimal).Value = abi.base_curr;
                cmd.Parameters.Add("@cur_amount", SqlDbType.Decimal).Value = abi.cur_amount;
                cmd.Parameters.Add("@discount", SqlDbType.Decimal).Value = abi.discount;
                cmd.Parameters.Add("@exch_rate", SqlDbType.Decimal).Value = abi.exch_rate;
                cmd.Parameters.Add("@exch_rate2", SqlDbType.Decimal).Value = abi.exch_rate2;
                cmd.Parameters.Add("@exch_rate3", SqlDbType.Decimal).Value = abi.exch_rate3;
                cmd.Parameters.Add("@value_1", SqlDbType.Decimal).Value = abi.value_1;
                cmd.Parameters.Add("@value_2", SqlDbType.Decimal).Value = abi.value_2;
                cmd.Parameters.Add("@value_3", SqlDbType.Decimal).Value = abi.value_3;
                cmd.Parameters.Add("@arrive_id", SqlDbType.Int).Value = abi.arrive_id;
                cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = abi.order_id;
                cmd.Parameters.Add("@pay_plan_id", SqlDbType.Int).Value = abi.pay_plan_id;
                cmd.Parameters.Add("@remitt_id", SqlDbType.Int).Value = abi.remitt_id;
                cmd.Parameters.Add("@voucher_no", SqlDbType.Int).Value = abi.voucher_no;
                cmd.Parameters.Add("@voucher_ref", SqlDbType.Int).Value = abi.voucher_ref;
                cmd.Parameters.Add("@orig_reference", SqlDbType.Int).Value = abi.orig_reference;
                cmd.Parameters.Add("@number_1", SqlDbType.Int).Value = abi.number_1;
                cmd.Parameters.Add("@period", SqlDbType.Int).Value = abi.period;
                cmd.Parameters.Add("@sequence_no", SqlDbType.Int).Value = abi.sequence_no;
                cmd.Parameters.Add("@sequence_ref", SqlDbType.Int).Value = abi.sequence_ref;
                cmd.Parameters.Add("@allocation_key", SqlDbType.Int).Value = abi.allocation_key;
                cmd.Parameters.Add("@dc_flag", SqlDbType.Int).Value = abi.dc_flag;
                cmd.Parameters.Add("@period_no", SqlDbType.Int).Value = abi.period_no;
                cmd.Parameters.Add("@collection", SqlDbType.Int).Value = abi.collection;
                cmd.Parameters.Add("@error_flag", SqlDbType.Int).Value = abi.error_flag;
                cmd.Parameters.Add("@pay_flag", SqlDbType.Int).Value = abi.pay_flag;
                cmd.Parameters.Add("@tax_id", SqlDbType.Int).Value = abi.tax_id;
                cmd.Parameters.Add("@account", SqlDbType.NVarChar).Value = abi.account;
                cmd.Parameters.Add("@account2", SqlDbType.NVarChar).Value = abi.account2;
                cmd.Parameters.Add("@address", SqlDbType.NVarChar).Value = abi.address;
                cmd.Parameters.Add("@apar_id", SqlDbType.NVarChar).Value = abi.apar_id;
                cmd.Parameters.Add("@apar_name", SqlDbType.NVarChar).Value = abi.apar_name;
                cmd.Parameters.Add("@apar_type", SqlDbType.NVarChar).Value = abi.apar_type;
                cmd.Parameters.Add("@ba_country_code", SqlDbType.NVarChar).Value = abi.ba_country_code;
                cmd.Parameters.Add("@bank_acc_type", SqlDbType.NVarChar).Value = abi.bank_acc_type;
                cmd.Parameters.Add("@bank_account", SqlDbType.NVarChar).Value = abi.bank_account;
                cmd.Parameters.Add("@batch_id", SqlDbType.NVarChar).Value = abi.batch_id;
                cmd.Parameters.Add("@clearing_code", SqlDbType.NVarChar).Value = abi.clearing_code;
                cmd.Parameters.Add("@client", SqlDbType.NVarChar).Value = abi.client;
                cmd.Parameters.Add("@client_ref", SqlDbType.NVarChar).Value = abi.client_ref;
                cmd.Parameters.Add("@commitment", SqlDbType.NVarChar).Value = abi.commitment;
                cmd.Parameters.Add("@complaint", SqlDbType.NVarChar).Value = abi.complaint;
                cmd.Parameters.Add("@contract_id", SqlDbType.NVarChar).Value = abi.contract_id;
                cmd.Parameters.Add("@country_code", SqlDbType.NVarChar).Value = abi.country_code;
                cmd.Parameters.Add("@curr_doc", SqlDbType.NVarChar).Value = abi.curr_doc;
                cmd.Parameters.Add("@curr_licence", SqlDbType.NVarChar).Value = abi.curr_licence;
                cmd.Parameters.Add("@currency", SqlDbType.NVarChar).Value = abi.currency;
                cmd.Parameters.Add("@description", SqlDbType.NVarChar).Value = abi.description;
                cmd.Parameters.Add("@dim_1", SqlDbType.NVarChar).Value = abi.dim_1;
                cmd.Parameters.Add("@dim_2", SqlDbType.NVarChar).Value = abi.dim_2;
                cmd.Parameters.Add("@dim_3", SqlDbType.NVarChar).Value = abi.dim_3;
                cmd.Parameters.Add("@dim_4", SqlDbType.NVarChar).Value = abi.dim_4;
                cmd.Parameters.Add("@dim_5", SqlDbType.NVarChar).Value = abi.dim_5;
                cmd.Parameters.Add("@dim_6", SqlDbType.NVarChar).Value = abi.dim_6;
                cmd.Parameters.Add("@dim_7", SqlDbType.NVarChar).Value = abi.dim_7;
                cmd.Parameters.Add("@ext_inv_ref", SqlDbType.NVarChar).Value = abi.ext_inv_ref;
                cmd.Parameters.Add("@ext_ref", SqlDbType.NVarChar).Value = abi.ext_ref;
                cmd.Parameters.Add("@factor_short", SqlDbType.NVarChar).Value = abi.factor_short;
                cmd.Parameters.Add("@foreign_bank", SqlDbType.NVarChar).Value = abi.foreign_bank;
                cmd.Parameters.Add("@interface", SqlDbType.NVarChar).Value = abi.interface_;
                cmd.Parameters.Add("@intrule_id", SqlDbType.NVarChar).Value = abi.intrule_id;
                cmd.Parameters.Add("@kid", SqlDbType.NVarChar).Value = abi.kid;
                cmd.Parameters.Add("@pay_currency", SqlDbType.NVarChar).Value = abi.pay_currency;
                cmd.Parameters.Add("@pay_method", SqlDbType.NVarChar).Value = abi.pay_method;
                cmd.Parameters.Add("@pay_temp_id", SqlDbType.NVarChar).Value = abi.pay_temp_id;
                cmd.Parameters.Add("@pay_transfer", SqlDbType.NVarChar).Value = abi.pay_transfer;
                cmd.Parameters.Add("@place", SqlDbType.NVarChar).Value = abi.place;
                cmd.Parameters.Add("@province", SqlDbType.NVarChar).Value = abi.province;
                cmd.Parameters.Add("@rem_level", SqlDbType.NVarChar).Value = abi.rem_level;
                cmd.Parameters.Add("@responsible", SqlDbType.NVarChar).Value = abi.responsible;
                cmd.Parameters.Add("@status", SqlDbType.NVarChar).Value = abi.status;
                cmd.Parameters.Add("@swift", SqlDbType.NVarChar).Value = abi.swift;
                cmd.Parameters.Add("@tax_code", SqlDbType.NVarChar).Value = abi.tax_code;
                cmd.Parameters.Add("@tax_system", SqlDbType.NVarChar).Value = abi.tax_system;
                cmd.Parameters.Add("@trans_type", SqlDbType.NVarChar).Value = abi.trans_type;
                cmd.Parameters.Add("@vat_reg_no", SqlDbType.NVarChar).Value = abi.vat_reg_no;
                cmd.Parameters.Add("@voucher_type", SqlDbType.NVarChar).Value = abi.voucher_type;
                cmd.Parameters.Add("@zip_code", SqlDbType.NVarChar).Value = abi.zip_code;
                cmd.Parameters.Add("@ext_arch_ref", SqlDbType.NVarChar).Value = abi.ext_arch_ref;
                LogService.WriteLogExecuteSQLCommand(cmd);
                cmd.ExecuteNonQuery();
                
                cmd.CommandText = AcrBatchInputSQL.GetMaxAgrtIDAcrBatchInputSQL();
                cmd.Parameters.Clear();
                abi.agrtid = Convert.ToInt32(cmd.ExecuteScalar());
            }
            catch (Exception x)
            {
                LogService.WriteLogException(x);
                throw x;
            }
            finally
            {
                m_dataBaseConectivity.AgrTempConnectionSQLConnection.Close();
            }

        }
        public bool IsExist(acrbatchinput abi)
        {
            try
            {
                m_dataBaseConectivity.AgrTempConnectionSQLConnection.Open();
                SqlCommand cmd = new SqlCommand(AcrBatchInputSQL.IsExistAcrBatchInputSQL(), m_dataBaseConectivity.AgrTempConnectionSQLConnection);
                cmd.Parameters.Add("@dim_4", SqlDbType.NVarChar).Value = abi.dim_4;
                cmd.Parameters.Add("@voucher_date", SqlDbType.DateTime).Value = abi.voucher_date;
                cmd.Parameters.Add("@description", SqlDbType.NVarChar).Value = abi.description;
                cmd.Parameters.Add("@cur_amount", SqlDbType.Decimal).Value = abi.cur_amount;
                cmd.Parameters.Add("@curr_doc", SqlDbType.NVarChar).Value = abi.curr_doc;
                cmd.Parameters.Add("@ext_inv_ref", SqlDbType.NVarChar).Value = abi.ext_inv_ref;
                cmd.Parameters.Add("@due_date", SqlDbType.DateTime).Value = abi.due_date;
                int result = Convert.ToInt16(cmd.ExecuteScalar());
                return result > 0;
            }
            catch (Exception x)
            {
                LogService.WriteLogException(x);
                throw x;
            }
            finally
            {
                m_dataBaseConectivity.AgrTempConnectionSQLConnection.Close();
            }
        }
        public void InsertToInterfaceTable(acrbatchinput abi)
        {
            try
            {
                m_dataBaseConectivity.InterfaceSqlConnection.Open();
                SqlCommand cmd = new SqlCommand(AcrBatchInputSQL.InsertAcrBatchInputInterfaceSQL(), m_dataBaseConectivity.InterfaceSqlConnection);
                cmd.Parameters.Add("@arrival_date", SqlDbType.DateTime).Value = DateTime.Now;//abi.arrival_date; //only indication insert.
                cmd.Parameters.Add("@disc_date", SqlDbType.DateTime).Value = abi.disc_date;
                cmd.Parameters.Add("@due_date", SqlDbType.DateTime).Value = abi.due_date;
                cmd.Parameters.Add("@trans_date", SqlDbType.DateTime).Value = abi.trans_date;
                cmd.Parameters.Add("@voucher_date", SqlDbType.DateTime).Value = abi.voucher_date.Date;
                cmd.Parameters.Add("@compl_delay", SqlDbType.DateTime).Value = abi.compl_delay;
                cmd.Parameters.Add("@amount", SqlDbType.Decimal).Value = abi.amount;
                cmd.Parameters.Add("@base_amount", SqlDbType.Decimal).Value = abi.base_amount;
                cmd.Parameters.Add("@base_curr", SqlDbType.Decimal).Value = abi.base_curr;
                cmd.Parameters.Add("@cur_amount", SqlDbType.Decimal).Value = abi.cur_amount;
                cmd.Parameters.Add("@discount", SqlDbType.Decimal).Value = abi.discount;
                cmd.Parameters.Add("@exch_rate", SqlDbType.Decimal).Value = abi.exch_rate;
                cmd.Parameters.Add("@exch_rate2", SqlDbType.Decimal).Value = abi.exch_rate2;
                cmd.Parameters.Add("@exch_rate3", SqlDbType.Decimal).Value = abi.exch_rate3;
                cmd.Parameters.Add("@value_1", SqlDbType.Decimal).Value = abi.value_1;
                cmd.Parameters.Add("@value_2", SqlDbType.Decimal).Value = abi.value_2;
                cmd.Parameters.Add("@value_3", SqlDbType.Decimal).Value = abi.value_3;
                cmd.Parameters.Add("@arrive_id", SqlDbType.Int).Value = abi.arrive_id;
                cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = abi.order_id;
                cmd.Parameters.Add("@pay_plan_id", SqlDbType.Int).Value = abi.pay_plan_id;
                cmd.Parameters.Add("@remitt_id", SqlDbType.Int).Value = abi.remitt_id;
                cmd.Parameters.Add("@voucher_no", SqlDbType.Int).Value = abi.voucher_no;
                cmd.Parameters.Add("@voucher_ref", SqlDbType.Int).Value = abi.voucher_ref;
                cmd.Parameters.Add("@orig_reference", SqlDbType.Int).Value = abi.orig_reference;
                cmd.Parameters.Add("@number_1", SqlDbType.Int).Value = abi.number_1;
                cmd.Parameters.Add("@period", SqlDbType.Int).Value = abi.period;
                cmd.Parameters.Add("@sequence_no", SqlDbType.Int).Value = abi.sequence_no;
                cmd.Parameters.Add("@sequence_ref", SqlDbType.Int).Value = abi.sequence_ref;
                cmd.Parameters.Add("@allocation_key", SqlDbType.Int).Value = abi.allocation_key;
                cmd.Parameters.Add("@dc_flag", SqlDbType.Int).Value = abi.dc_flag;
                cmd.Parameters.Add("@period_no", SqlDbType.Int).Value = abi.period_no;
                cmd.Parameters.Add("@collection", SqlDbType.Int).Value = abi.collection;
                cmd.Parameters.Add("@error_flag", SqlDbType.Int).Value = abi.error_flag;
                cmd.Parameters.Add("@pay_flag", SqlDbType.Int).Value = abi.pay_flag;
                cmd.Parameters.Add("@tax_id", SqlDbType.Int).Value = abi.tax_id;
                cmd.Parameters.Add("@account", SqlDbType.NVarChar).Value = abi.account;
                cmd.Parameters.Add("@account2", SqlDbType.NVarChar).Value = abi.account2;
                cmd.Parameters.Add("@address", SqlDbType.NVarChar).Value = abi.address;
                cmd.Parameters.Add("@apar_id", SqlDbType.NVarChar).Value = abi.apar_id;
                cmd.Parameters.Add("@apar_name", SqlDbType.NVarChar).Value = abi.apar_name;
                cmd.Parameters.Add("@apar_type", SqlDbType.NVarChar).Value = abi.apar_type;
                cmd.Parameters.Add("@ba_country_code", SqlDbType.NVarChar).Value = abi.ba_country_code;
                cmd.Parameters.Add("@bank_acc_type", SqlDbType.NVarChar).Value = abi.bank_acc_type;
                cmd.Parameters.Add("@bank_account", SqlDbType.NVarChar).Value = abi.bank_account;
                cmd.Parameters.Add("@batch_id", SqlDbType.NVarChar).Value = abi.batch_id;
                cmd.Parameters.Add("@clearing_code", SqlDbType.NVarChar).Value = abi.clearing_code;
                cmd.Parameters.Add("@client", SqlDbType.NVarChar).Value = abi.client;
                cmd.Parameters.Add("@client_ref", SqlDbType.NVarChar).Value = abi.client_ref;
                cmd.Parameters.Add("@commitment", SqlDbType.NVarChar).Value = abi.commitment;
                cmd.Parameters.Add("@complaint", SqlDbType.NVarChar).Value = abi.complaint;
                cmd.Parameters.Add("@contract_id", SqlDbType.NVarChar).Value = abi.contract_id;
                cmd.Parameters.Add("@country_code", SqlDbType.NVarChar).Value = abi.country_code;
                cmd.Parameters.Add("@curr_doc", SqlDbType.NVarChar).Value = abi.curr_doc;
                cmd.Parameters.Add("@curr_licence", SqlDbType.NVarChar).Value = abi.curr_licence;
                cmd.Parameters.Add("@currency", SqlDbType.NVarChar).Value = abi.currency;
                cmd.Parameters.Add("@description", SqlDbType.NVarChar).Value = abi.description;
                cmd.Parameters.Add("@dim_1", SqlDbType.NVarChar).Value = abi.dim_1;
                cmd.Parameters.Add("@dim_2", SqlDbType.NVarChar).Value = abi.dim_2;
                cmd.Parameters.Add("@dim_3", SqlDbType.NVarChar).Value = abi.dim_3;
                cmd.Parameters.Add("@dim_4", SqlDbType.NVarChar).Value = abi.dim_4;
                cmd.Parameters.Add("@dim_5", SqlDbType.NVarChar).Value = abi.dim_5;
                cmd.Parameters.Add("@dim_6", SqlDbType.NVarChar).Value = abi.dim_6;
                cmd.Parameters.Add("@dim_7", SqlDbType.NVarChar).Value = abi.dim_7;
                cmd.Parameters.Add("@ext_inv_ref", SqlDbType.NVarChar).Value = abi.ext_inv_ref;
                cmd.Parameters.Add("@ext_ref", SqlDbType.NVarChar).Value = abi.ext_ref;
                cmd.Parameters.Add("@factor_short", SqlDbType.NVarChar).Value = abi.factor_short;
                cmd.Parameters.Add("@foreign_bank", SqlDbType.NVarChar).Value = abi.foreign_bank;
                cmd.Parameters.Add("@interface", SqlDbType.NVarChar).Value = abi.interface_;
                cmd.Parameters.Add("@intrule_id", SqlDbType.NVarChar).Value = abi.intrule_id;
                cmd.Parameters.Add("@kid", SqlDbType.NVarChar).Value = abi.kid;
                cmd.Parameters.Add("@pay_currency", SqlDbType.NVarChar).Value = abi.pay_currency;
                cmd.Parameters.Add("@pay_method", SqlDbType.NVarChar).Value = abi.pay_method;
                cmd.Parameters.Add("@pay_temp_id", SqlDbType.NVarChar).Value = abi.pay_temp_id;
                cmd.Parameters.Add("@pay_transfer", SqlDbType.NVarChar).Value = abi.pay_transfer;
                cmd.Parameters.Add("@place", SqlDbType.NVarChar).Value = abi.place;
                cmd.Parameters.Add("@province", SqlDbType.NVarChar).Value = abi.province;
                cmd.Parameters.Add("@rem_level", SqlDbType.NVarChar).Value = abi.rem_level;
                cmd.Parameters.Add("@responsible", SqlDbType.NVarChar).Value = abi.responsible;
                cmd.Parameters.Add("@status", SqlDbType.NVarChar).Value = abi.status;
                cmd.Parameters.Add("@swift", SqlDbType.NVarChar).Value = abi.swift;
                cmd.Parameters.Add("@tax_code", SqlDbType.NVarChar).Value = abi.tax_code;
                cmd.Parameters.Add("@tax_system", SqlDbType.NVarChar).Value = abi.tax_system;
                cmd.Parameters.Add("@trans_type", SqlDbType.NVarChar).Value = abi.trans_type;
                cmd.Parameters.Add("@vat_reg_no", SqlDbType.NVarChar).Value = abi.vat_reg_no;
                cmd.Parameters.Add("@voucher_type", SqlDbType.NVarChar).Value = abi.voucher_type;
                cmd.Parameters.Add("@zip_code", SqlDbType.NVarChar).Value = abi.zip_code;
                cmd.Parameters.Add("@ext_arch_ref", SqlDbType.NVarChar).Value = abi.ext_arch_ref;
                cmd.Parameters.Add("@agrtid", SqlDbType.Int).Value = abi.agrtid;
                LogService.WriteLogExecuteSQLCommand(cmd);
                cmd.ExecuteNonQuery();
            }
            catch (Exception x)
            {
                LogService.WriteLogException(x);
                throw x;
            }
            finally
            {
                m_dataBaseConectivity.InterfaceSqlConnection.Close();
            }

        }
    }
}
